The purpose of this exercise is to teach methods of creating point data for display in various programs. These skills will help you understand the foundation of point data, creation of new point datasets, and editing attribute tables.

1 The Introduction

A recent survey was sent to new students at APSU to determine what information they felt was missing in their new student orientation packets. One of the most common responses was that while there is enough dining options on campus, the students were not always aware of where certain options were located. Additionally, students were also interested in dining options were located close to campus. So the APSU Dining Services director has asked you to develop a map specific to dining locations in and around campus. On this map the director would like to see the name of each point, a way to determine if it is part of Dining Services or an off-campus location (think about symbology), and some method of listing their hours of operation. They provided a list of campus dining locations and convenience stores here. Off campus dining should be within walking distance (~1mi). A dataset for this has been developed by obtaining location information from other sources. However, if there is missing information from this list you should feel free to append the data.

In this exercise you will:

  • Learn to create point data
  • Work with external datasets that contain x,y data
  • Edit and add information to the attribute table
  • Optionally work to:
    • Develop multi-part symbology
    • Add tables to a map

Software specific directions can be found for each step below. Please submit the answer to the questions and your final map by the due date.

1.1 Step One: The Data

You will need to use aerial imagery for this exercise in order to identify the dining locations on and off campus. The information contained in the link in the introduction should provide you all of the basic information. Adding Montgomery County or the county/state datasets for Tennessee from previous exercises might help to provide location information but is not necessarily required.

View Directions in ArcGIS Pro

Blah…blah…blah…

Question No. 1
Insert Text Here

View directions in QGIS

In Exercise 4, Step 2 you added a remote connection to satellite imagery using the XYZ Tiles of the Browser Pane. Because this exercise will rely heavily on having accessible imagery you will begin by adding several other remote connections. This way you have options as to which imagery works best for this exercise. Remember in Exercise 4 you needed to right/CRTL-click on XYZ Tiles and add a “New Connection”. Below is the URLs you need to use for each connection:

Service Provider URL Appx. Max Scale
Satellite Imagery Bing http://ecn.t3.tiles.virtualearth.net/tiles/a{q}.jpeg?g=1 1:1
Satellite Imagery ESRI https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x} 1:1
Street Map OpenStreetMap https://tile.openstreetmap.org/{z}/{x}/{y}.png 1:1
Topographic Map OpenStreetMap https://tile.opentopomap.org/{z}/{x}/{y}.png 1:3400

You will be using one of the services above to locate the on and off-campus dining locations so take some time to add each one to your layers and examine the area surrounding campus. It is up to you to choose which type of imagery is best used for the data creation as well as the final map for this assignment.

Once you have selected the imagery you plan to use, click Layer > Create Layer > New Shapefile Layer to create a new shapefile dataset. In the resulting window, click on the browse button Browse for file location to give your shapefile a new name and save it in your project folder.

New Shapefile Layer

For the rest of the options use the following settings:

  • File encoding = UTF-8
  • Geometry type = Point
  • Additional dimensions = None, EPSG:4326 - WGS 84
  • New Field
    • Name = Name
    • Type = TextData
    • Length = 80

New Shapefile Layer Box

Because you will be creating a series of points the geometry should be set to point. However, you would take these same steps to create a multipoint, line, or polygon shapefile as well. The UTF-8 encoding allows for the dataset to be used on Windows of Mac OS systems which enables the possibility of sharing the data. After adding the information for the New Field click the button to Add to Fields List to add a field called “Name” to your dataset and click OK.

This will create a new dataset in your layers that allows you to add additional point information. With the new dataset selected, begin by either right/CRTL clicking on the new data layer or clicking the pencil icon Toggle Editing to Toggle Editing. This will make the new layer editable. Next, click on the Add Point Feature button Add Point Feature and notice as your cursor becomes a target.

Adding Point Data

Place the target over the Woodward Library building roughly where the Starbucks is located and click. In the resulting window give this location attributes where the id = 1 and the Name = Starbucks and click OK. You will notice a new point that appears on the map and your cursor will return to a target like appearance. This created point data representing Starbucks and is uniquely identified by the ID and Name variables. Repeat this process and create points for all of the on-campus dining locations and convenience stores (~12). For the ID field continue to increase the number by one each time and for the Name field type in the name of the location you are depicting. When you have finished the last data point, click the Save Layer Edits button Save Layer Edits and toggle editing for that layer off by clicking the toggle button Toggle Editing.

With the on-campus locations created you could also use the same steps to create the off-campus location. However, sometimes you will find that collaborators send you information in the form of a spreadsheet or some other format such as keyhole markup langauge (KML) from Google Earth or a KMZ which is a compressed version of a KML. In Exercise 5, Step 2 you learned how to import a *.csv file without geometry (meaning there were no X and Y values for locations). If the *.csv file has variables for a location, such as longitude and latitude or UTM, you can simply choose “Point Coordinate” and provide the fields where the XY data is located. However, with a useful QGIS plug-in you have the ability to import some data directly from a URL depending on the format. Similar to Exercise 5, Step 4, go to Plugins > Manage and Install Plugins on the menu bar and search for MMQGIS and install the plug-in.

MMQGIS

On the menu bar you will see a new option for MMQGIS available. Click MMQGIS > Import/Export > Geometry Import from CSV File and in the resulting window use the following options and click apply:

Importing CSV File with MMQGIS

The resulting import should have placed another 24 data points on your map. You can use right/CRTL click and “Zoom to Layer” on the new layer to see all of the new points (colors my vary).

Imported CSV Points

Question No. 1
Which on-campus location is the last to close on a Saturday night? What other variables were included in the off-campus points that weren’t included in the on-campus data you created?

View directions in R

Before you begin, you will need to open the Ex2 Colab Notebook and insert tocolab after github in the URL to open in the Colab Environment. As you have seen before, R requires various packages to complete certain analyses. In this exercise you will be using tidyverse, OpenStreetMaps, ggfortify, maptools, and rgeos. To install and load the packages we will use the following script:

Blah…blah…blah…

Question No. 1
Insert Text Here

1.2 Step Two: The Analyses

Blah…blah…blah…

View Directions in ArcGIS Pro

Blah…blah…blah…

Question No. 2
Insert Text Here

View Directions in QGIS

ADDING INFORMATION TO THE ATTRIBUTE TABLE

Question No. 2
Insert Text Here

View Directions in R

Blah…blah…blah…

Question No. 2
Insert Text Here

1.3 Step Three: The Visualization

Blah…blah…blah…

View directions in ArcGIS Pro

Blah…blah…blah…

Question No. 3
Insert Text Here

View directions in QGIS

Blah…blah…blah…

Question No. 3
Insert Text Here

View directions in R

Blah…blah…blah…

Question No. 3
Insert Text Here

1.4 Step Four: The Proposal

Blah…blah…blah…

View directions in ArcGIS Pro

Blah…blah…blah…

Question No. 4
Insert Text Here

View directions in QGIS

Blah…blah…blah…

Question No. 4
Insert Text Here

View directions in R

Blah…blah…blah…

Question No. 4
Insert Text Here

2 The Write-Up

Blah…blah…blah…

When complete, send a link to your Colab Notebook or word document with answers to Questions 1-4 and your completed map via email.

LS0tDQp0aXRsZTogIkV4ZXJjaXNlIDY6IENyZWF0aW5nIFBvaW50IERhdGEgPGJyPjxzbWFsbD5HZW9ncmFwaGljIEluZm9ybWF0aW9uIFN5c3RlbXMgMSBMYWI8L3NtYWxsPjwvYnI+Ig0KYXV0aG9yOiAiR0VPRyAzMTUwIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIHJvd3MucHJpbnQ6IDEwDQogICAgdGhlbWU6IGNvc21vDQogICAgaGlnaGxpZ2h0OiBicmVlemVkYXJrDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDoNCiAgICAgIGNvbGxhcHNlZDogbm8NCiAgICAgIHNtb290aF9zY3JvbGw6IHllcw0KICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KICAgIGRmX3ByaW50OiBwYWdlZA0KZWRpdG9yX29wdGlvbnM6DQogIGNodW5rX291dHB1dF90eXBlOiBpbmxpbmUNCiAgbW9kZTogZ2ZtDQotLS0NCg0KYGBgez1odG1sfQ0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCg0KaDEudGl0bGUgew0KICBmb250LXNpemU6IDQwcHg7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBjb2xvcjogRGFya0JsdWU7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCmg0LmF1dGhvciB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogIGZvbnQtc2l6ZTogMjBweDsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGNvbG9yOiBEYXJrQmx1ZTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQouem9vbSB7DQogIHRyYW5zZm9ybS1vcmlnaW46IDQwJSA1MCUgMDsNCiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4yczsNCiAgbWFyZ2luOiAwIGF1dG87DQp9DQouem9vbSBpbWd7DQoJd2lkdGg6YXV0bzsNCgloZWlnaHQ6YXV0bzsJDQp9DQouem9vbTpob3ZlciB7DQogIHRyYW5zZm9ybTogc2NhbGUoMik7DQp9DQoNCnRoLCB0ZCB7cGFkZGluZzogNXB4O30NCg0KPC9zdHlsZT4NCmBgYA0KPGhyPjwvaHI+DQoNClRoZSBwdXJwb3NlIG9mIHRoaXMgZXhlcmNpc2UgaXMgdG8gdGVhY2ggbWV0aG9kcyBvZiBjcmVhdGluZyBwb2ludCBkYXRhIGZvciBkaXNwbGF5IGluIHZhcmlvdXMgcHJvZ3JhbXMuIFRoZXNlIHNraWxscyB3aWxsIGhlbHAgeW91IHVuZGVyc3RhbmQgdGhlIGZvdW5kYXRpb24gb2YgcG9pbnQgZGF0YSwgY3JlYXRpb24gb2YgbmV3IHBvaW50IGRhdGFzZXRzLCBhbmQgZWRpdGluZyBhdHRyaWJ1dGUgdGFibGVzLg0KDQojIFRoZSBJbnRyb2R1Y3Rpb24NCg0KQSByZWNlbnQgc3VydmV5IHdhcyBzZW50IHRvIG5ldyBzdHVkZW50cyBhdCBBUFNVIHRvIGRldGVybWluZSB3aGF0IGluZm9ybWF0aW9uIHRoZXkgZmVsdCB3YXMgbWlzc2luZyBpbiB0aGVpciBuZXcgc3R1ZGVudCBvcmllbnRhdGlvbiBwYWNrZXRzLiBPbmUgb2YgdGhlIG1vc3QgY29tbW9uIHJlc3BvbnNlcyB3YXMgdGhhdCB3aGlsZSB0aGVyZSBpcyBlbm91Z2ggZGluaW5nIG9wdGlvbnMgb24gY2FtcHVzLCB0aGUgc3R1ZGVudHMgd2VyZSBub3QgYWx3YXlzIGF3YXJlIG9mIHdoZXJlIGNlcnRhaW4gb3B0aW9ucyB3ZXJlIGxvY2F0ZWQuIEFkZGl0aW9uYWxseSwgc3R1ZGVudHMgd2VyZSBhbHNvIGludGVyZXN0ZWQgaW4gZGluaW5nIG9wdGlvbnMgd2VyZSBsb2NhdGVkIGNsb3NlIHRvIGNhbXB1cy4gU28gdGhlIFtBUFNVIERpbmluZyBTZXJ2aWNlc10oaHR0cHM6Ly93d3cuYXBzdS5lZHUvZGluaW5nL2luZGV4LnBocCkgZGlyZWN0b3IgaGFzIGFza2VkIHlvdSB0byBkZXZlbG9wIGEgbWFwIHNwZWNpZmljIHRvIGRpbmluZyBsb2NhdGlvbnMgaW4gYW5kIGFyb3VuZCBjYW1wdXMuIE9uIHRoaXMgbWFwIHRoZSBkaXJlY3RvciB3b3VsZCBsaWtlIHRvIHNlZSB0aGUgbmFtZSBvZiBlYWNoIHBvaW50LCBhIHdheSB0byBkZXRlcm1pbmUgaWYgaXQgaXMgcGFydCBvZiBEaW5pbmcgU2VydmljZXMgb3IgYW4gb2ZmLWNhbXB1cyBsb2NhdGlvbiAodGhpbmsgYWJvdXQgc3ltYm9sb2d5KSwgYW5kIHNvbWUgbWV0aG9kIG9mIGxpc3RpbmcgdGhlaXIgaG91cnMgb2Ygb3BlcmF0aW9uLiBUaGV5IHByb3ZpZGVkIGEgbGlzdCBvZiBjYW1wdXMgZGluaW5nIGxvY2F0aW9ucyBhbmQgY29udmVuaWVuY2Ugc3RvcmVzIFtoZXJlXShodHRwczovL2RpbmVvbmNhbXB1cy5jb20vYXBzdS9ob3Vycy1vZi1vcGVyYXRpb24pLiBPZmYgY2FtcHVzIGRpbmluZyBzaG91bGQgYmUgd2l0aGluIHdhbGtpbmcgZGlzdGFuY2UgKH4xbWkpLiBBIGRhdGFzZXQgZm9yIHRoaXMgaGFzIGJlZW4gZGV2ZWxvcGVkIGJ5IG9idGFpbmluZyBsb2NhdGlvbiBpbmZvcm1hdGlvbiBmcm9tIFtvdGhlciBzb3VyY2VzXShodHRwczovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9ybHo9MUMxR0NFVV9lblVTODgwVVM4ODAmdGJzPWxmOjEsbGZfdWk6OSZ0Ym09bGNsJnN4c3JmPUFPYWVtdklqTEV3MTFUaTZ5VmtwTzJieW5BT2hobHNRTUE6MTYzMTgxMTYwOTM5NSZxPWRpbmluZytuZWFyK21lJnJmbGZxPTEmbnVtPTEwJnZlZD0yYWhVS0V3ak9zOFg2LTRQekFoV21TUEVESFU3dkNqVVF0Z042QkFnTUVBYyNybGZpPWhkOjtzaTo7bXY6W1szNi41NDMzMzY1NTI3ODIxMSwtODcuMzMzMjE2ODExNzY3NzFdLFszNi41MTc5NTYyMjk4MTk0MjYsLTg3LjM3MDEyNDAwNzgxMjYzXSxudWxsLFszNi41MzA2NDc0MzIzNjIwNDUsLTg3LjM1MTY3MDQwOTc5MDE3XSwxNV0pLiBIb3dldmVyLCBpZiB0aGVyZSBpcyBtaXNzaW5nIGluZm9ybWF0aW9uIGZyb20gdGhpcyBsaXN0IHlvdSBzaG91bGQgZmVlbCBmcmVlIHRvIGFwcGVuZCB0aGUgZGF0YS4NCg0KSW4gdGhpcyBleGVyY2lzZSB5b3Ugd2lsbDoNCg0KLSAgIExlYXJuIHRvIGNyZWF0ZSBwb2ludCBkYXRhDQotICAgV29yayB3aXRoIGV4dGVybmFsIGRhdGFzZXRzIHRoYXQgY29udGFpbiB4LHkgZGF0YQ0KLSAgIEVkaXQgYW5kIGFkZCBpbmZvcm1hdGlvbiB0byB0aGUgYXR0cmlidXRlIHRhYmxlDQotICAgT3B0aW9uYWxseSB3b3JrIHRvOg0KICAgIC0gICBEZXZlbG9wIG11bHRpLXBhcnQgc3ltYm9sb2d5DQogICAgLSAgIEFkZCB0YWJsZXMgdG8gYSBtYXANCg0KU29mdHdhcmUgc3BlY2lmaWMgZGlyZWN0aW9ucyBjYW4gYmUgZm91bmQgZm9yIGVhY2ggc3RlcCBiZWxvdy4gUGxlYXNlIHN1Ym1pdCB0aGUgYW5zd2VyIHRvIHRoZSBxdWVzdGlvbnMgYW5kIHlvdXIgZmluYWwgbWFwIGJ5IHRoZSBkdWUgZGF0ZS4NCg0KIyMgU3RlcCBPbmU6IFRoZSBEYXRhDQoNCllvdSB3aWxsIG5lZWQgdG8gdXNlIGFlcmlhbCBpbWFnZXJ5IGZvciB0aGlzIGV4ZXJjaXNlIGluIG9yZGVyIHRvIGlkZW50aWZ5IHRoZSBkaW5pbmcgbG9jYXRpb25zIG9uIGFuZCBvZmYgY2FtcHVzLiBUaGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZSBsaW5rIGluIHRoZSBpbnRyb2R1Y3Rpb24gc2hvdWxkIHByb3ZpZGUgeW91IGFsbCBvZiB0aGUgYmFzaWMgaW5mb3JtYXRpb24uIEFkZGluZyBNb250Z29tZXJ5IENvdW50eSBvciB0aGUgY291bnR5L3N0YXRlIGRhdGFzZXRzIGZvciBUZW5uZXNzZWUgZnJvbSBwcmV2aW91cyBleGVyY2lzZXMgbWlnaHQgaGVscCB0byBwcm92aWRlIGxvY2F0aW9uIGluZm9ybWF0aW9uIGJ1dCBpcyBub3QgbmVjZXNzYXJpbHkgcmVxdWlyZWQuIA0KDQo8ZGV0YWlscz4NCjxzdW1tYXJ5PjxiaWc+VmlldyBEaXJlY3Rpb25zIGluIDxiPiBbQXJjR0lTIFByb117c3R5bGU9ImNvbG9yOiNmZjQ1MDAifSA8L2I+PC9iaWc+PC9zdW1tYXJ5Pg0KDQpCbGFoLi4uYmxhaC4uLmJsYWguLi4NCg0KPGJpZz48Yj5RdWVzdGlvbiBOby4gMTwvYj48L2JpZz4NCjxibG9ja3F1b3RlPg0KX0luc2VydCBUZXh0IEhlcmVfDQo8L2Jsb2NrcXVvdGU+DQoNCjwvZGV0YWlscz4NCjxocj48L2hyPg0KDQo8ZGV0YWlscz4NCjxzdW1tYXJ5PjxiaWc+VmlldyBkaXJlY3Rpb25zIGluIDxiPiBbUUdJU117c3R5bGU9ImNvbG9yOiAjMDA2NDAwIn0gPC9iPjwvYmlnPjwvc3VtbWFyeT4NCg0KSW4gW0V4ZXJjaXNlIDQsIFN0ZXAgMl0oaHR0cHM6Ly9jaHJpc21nZW50cnkuZ2l0aHViLmlvL0dJUzEtRXhlcmNpc2UtNC8jMTJfU3RlcF9Ud286X1RoZV9BbmFseXNlcykgeW91IGFkZGVkIGEgcmVtb3RlIGNvbm5lY3Rpb24gdG8gc2F0ZWxsaXRlIGltYWdlcnkgdXNpbmcgdGhlICoqWFlaIFRpbGVzKiogb2YgdGhlIF9Ccm93c2VyIFBhbmVfLiBCZWNhdXNlIHRoaXMgZXhlcmNpc2Ugd2lsbCByZWx5IGhlYXZpbHkgb24gaGF2aW5nIGFjY2Vzc2libGUgaW1hZ2VyeSB5b3Ugd2lsbCBiZWdpbiBieSBhZGRpbmcgc2V2ZXJhbCBvdGhlciByZW1vdGUgY29ubmVjdGlvbnMuIFRoaXMgd2F5IHlvdSBoYXZlIG9wdGlvbnMgYXMgdG8gd2hpY2ggaW1hZ2VyeSB3b3JrcyBiZXN0IGZvciB0aGlzIGV4ZXJjaXNlLiBSZW1lbWJlciBpbiBbRXhlcmNpc2UgNF0oaHR0cHM6Ly9jaHJpc21nZW50cnkuZ2l0aHViLmlvL0dJUzEtRXhlcmNpc2UtNC8jMTJfU3RlcF9Ud286X1RoZV9BbmFseXNlcykgeW91IG5lZWRlZCB0byByaWdodC9DUlRMLWNsaWNrIG9uICoqWFlaIFRpbGVzKiogYW5kIGFkZCBhICJOZXcgQ29ubmVjdGlvbiIuIEJlbG93IGlzIHRoZSBVUkxzIHlvdSBuZWVkIHRvIHVzZSBmb3IgZWFjaCBjb25uZWN0aW9uOg0KDQp8ICoqU2VydmljZSoqIHwgKipQcm92aWRlcioqIHwgKipVUkwqKiB8ICoqQXBweC4gTWF4IFNjYWxlKiogfA0KfCAtLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHwgIA0KfCBTYXRlbGxpdGUgSW1hZ2VyeSB8IEJpbmcgfCBodHRwOi8vZWNuLnQzLnRpbGVzLnZpcnR1YWxlYXJ0aC5uZXQvdGlsZXMvYXtxfS5qcGVnP2c9MSB8IDE6MSB8DQp8IFNhdGVsbGl0ZSBJbWFnZXJ5IHwgRVNSSSB8IGh0dHBzOi8vc2VydmVyLmFyY2dpc29ubGluZS5jb20vQXJjR0lTL3Jlc3Qvc2VydmljZXMvV29ybGRfSW1hZ2VyeS9NYXBTZXJ2ZXIvdGlsZS97en0ve3l9L3t4fSB8IDE6MSB8DQp8IFN0cmVldCBNYXAgfCBbT3BlblN0cmVldE1hcF0oaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvKSB8IGh0dHBzOi8vdGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcgfCAxOjEgfA0KfCBUb3BvZ3JhcGhpYyBNYXAgfCBbT3BlblN0cmVldE1hcF0oaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvKSB8IGh0dHBzOi8vdGlsZS5vcGVudG9wb21hcC5vcmcve3p9L3t4fS97eX0ucG5nIHwgMTozNDAwIHwNCg0KWW91IHdpbGwgYmUgdXNpbmcgb25lIG9mIHRoZSBzZXJ2aWNlcyBhYm92ZSB0byBsb2NhdGUgdGhlIG9uIGFuZCBvZmYtY2FtcHVzIGRpbmluZyBsb2NhdGlvbnMgc28gdGFrZSBzb21lIHRpbWUgdG8gPHU+YWRkIGVhY2ggb25lIHRvIHlvdXIgbGF5ZXJzIGFuZCBleGFtaW5lIHRoZSBhcmVhIHN1cnJvdW5kaW5nIGNhbXB1czwvdT4uIEl0IGlzIHVwIHRvIHlvdSB0byBjaG9vc2Ugd2hpY2ggdHlwZSBvZiBpbWFnZXJ5IGlzIGJlc3QgdXNlZCBmb3IgdGhlIGRhdGEgY3JlYXRpb24gYXMgd2VsbCBhcyB0aGUgZmluYWwgbWFwIGZvciB0aGlzIGFzc2lnbm1lbnQuDQoNCk9uY2UgeW91IGhhdmUgc2VsZWN0ZWQgdGhlIGltYWdlcnkgeW91IHBsYW4gdG8gdXNlLCBjbGljayBfTGF5ZXIgPiBDcmVhdGUgTGF5ZXIgPiBOZXcgU2hhcGVmaWxlIExheWVyXyB0byBjcmVhdGUgYSBuZXcgc2hhcGVmaWxlIGRhdGFzZXQuIEluIHRoZSByZXN1bHRpbmcgd2luZG93LCBjbGljayBvbiB0aGUgYnJvd3NlIGJ1dHRvbiA8aW1nIHNyYz0gIkltYWdlcy9xZ2lzLWZpbGUtbG9jYXRpb24tYnV0dG9uLmpwZyIgYWx0PSJCcm93c2UgZm9yIGZpbGUgbG9jYXRpb24iIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCI+IHRvIGdpdmUgeW91ciBzaGFwZWZpbGUgYSBuZXcgbmFtZSBhbmQgc2F2ZSBpdCBpbiB5b3VyIHByb2plY3QgZm9sZGVyLiANCg0KPHAgYWxpZ249ImNlbnRlciI+PGRpdiBjbGFzcz0iem9vbSI+PGltZyBzcmM9ICJJbWFnZXMvcWdpcy1uZXctc2hhcGVmaWxlLWxheWVyLnBuZyIgYWx0PSJOZXcgU2hhcGVmaWxlIExheWVyIiBzdHlsZT0id2lkdGg6MTAwJSI+PC9kaXY+PC9wPg0KDQpGb3IgdGhlIHJlc3Qgb2YgdGhlIG9wdGlvbnMgdXNlIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6DQoNCi0gRmlsZSBlbmNvZGluZyA9IFVURi04DQotIEdlb21ldHJ5IHR5cGUgPSBQb2ludA0KLSBBZGRpdGlvbmFsIGRpbWVuc2lvbnMgPSBOb25lLCBFUFNHOjQzMjYgLSBXR1MgODQNCi0gTmV3IEZpZWxkDQogIC0gTmFtZSA9IE5hbWUNCiAgLSBUeXBlID0gVGV4dERhdGENCiAgLSBMZW5ndGggPSA4MA0KDQo8cCBhbGlnbj0iY2VudGVyIj48ZGl2IGNsYXNzPSJ6b29tIj48aW1nIHNyYz0gIkltYWdlcy9xZ2lzLW5ldy1zaGFwZWZpbGUtbGF5ZXItZGlhbG9nLnBuZyIgYWx0PSJOZXcgU2hhcGVmaWxlIExheWVyIEJveCIgc3R5bGU9IndpZHRoOjEwMCUiPjwvZGl2PjwvcD4NCg0KQmVjYXVzZSB5b3Ugd2lsbCBiZSBjcmVhdGluZyBhIHNlcmllcyBvZiBwb2ludHMgdGhlIGdlb21ldHJ5IHNob3VsZCBiZSBzZXQgdG8gcG9pbnQuIEhvd2V2ZXIsIHlvdSB3b3VsZCB0YWtlIHRoZXNlIHNhbWUgc3RlcHMgdG8gY3JlYXRlIGEgbXVsdGlwb2ludCwgbGluZSwgb3IgcG9seWdvbiBzaGFwZWZpbGUgYXMgd2VsbC4gVGhlIFVURi04IGVuY29kaW5nIGFsbG93cyBmb3IgdGhlIGRhdGFzZXQgdG8gYmUgdXNlZCBvbiBXaW5kb3dzIG9mIE1hYyBPUyBzeXN0ZW1zIHdoaWNoIGVuYWJsZXMgdGhlIHBvc3NpYmlsaXR5IG9mIHNoYXJpbmcgdGhlIGRhdGEuIEFmdGVyIGFkZGluZyB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSBOZXcgRmllbGQgY2xpY2sgdGhlIGJ1dHRvbiB0byAqKkFkZCB0byBGaWVsZHMgTGlzdCoqIHRvIGFkZCBhIGZpZWxkIGNhbGxlZCAiTmFtZSIgdG8geW91ciBkYXRhc2V0IGFuZCBjbGljayBPSy4NCg0KVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGluIHlvdXIgbGF5ZXJzIHRoYXQgYWxsb3dzIHlvdSB0byBhZGQgYWRkaXRpb25hbCBwb2ludCBpbmZvcm1hdGlvbi4gV2l0aCB0aGUgbmV3IGRhdGFzZXQgc2VsZWN0ZWQsIGJlZ2luIGJ5IGVpdGhlciByaWdodC9DUlRMIGNsaWNraW5nIG9uIHRoZSBuZXcgZGF0YSBsYXllciBvciBjbGlja2luZyB0aGUgcGVuY2lsIGljb24gPGltZyBzcmM9ICJJbWFnZXMvcWdpcy10b2dnbGUtZWRpdGluZy1idXR0b24uanBnIiBhbHQ9IlRvZ2dsZSBFZGl0aW5nIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiPiB0byBfVG9nZ2xlIEVkaXRpbmdfLiBUaGlzIHdpbGwgbWFrZSB0aGUgbmV3IGxheWVyIGVkaXRhYmxlLiBOZXh0LCBjbGljayBvbiB0aGUgKipBZGQgUG9pbnQgRmVhdHVyZSoqIGJ1dHRvbiA8aW1nIHNyYz0gIkltYWdlcy9xZ2lzLWFkZC1wb2ludC1mZWF0dXJlLWJ1dHRvbi5qcGciIGFsdD0iQWRkIFBvaW50IEZlYXR1cmUiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCI+IGFuZCBub3RpY2UgYXMgeW91ciBjdXJzb3IgYmVjb21lcyBhIHRhcmdldC4NCg0KPHAgYWxpZ249ImNlbnRlciI+PGRpdiBjbGFzcz0iem9vbSI+PGltZyBzcmM9ICJJbWFnZXMvcWdpcy1lZGl0LW5ldy1zaGFwZWZpbGUucG5nIiBhbHQ9IkFkZGluZyBQb2ludCBEYXRhIiBzdHlsZT0id2lkdGg6MTAwJSI+PC9kaXY+PC9wPg0KDQpQbGFjZSB0aGUgdGFyZ2V0IG92ZXIgdGhlIFdvb2R3YXJkIExpYnJhcnkgYnVpbGRpbmcgX3JvdWdobHlfIHdoZXJlIHRoZSBbU3RhcmJ1Y2tzXShodHRwczovL3d3dy5zdGFyYnVja3MuY29tL3N0b3JlLWxvY2F0b3Ivc3RvcmUvODcwMDUvYXVzdGluLXBlYXktc3RhdGUtdW5pdmVyc2l0eS02MDEtY29sbGVnZS1zdC1jbGFya3N2aWxsZS10bi0zNzA0NDAwMDEtdXMpIGlzIGxvY2F0ZWQgYW5kIGNsaWNrLiBJbiB0aGUgcmVzdWx0aW5nIHdpbmRvdyBnaXZlIHRoaXMgbG9jYXRpb24gYXR0cmlidXRlcyB3aGVyZSB0aGUgKippZCA9IDEqKiBhbmQgdGhlICoqTmFtZSA9IFN0YXJidWNrcyoqIGFuZCBjbGljayBPSy4gWW91IHdpbGwgbm90aWNlIGEgbmV3IHBvaW50IHRoYXQgYXBwZWFycyBvbiB0aGUgbWFwIGFuZCB5b3VyIGN1cnNvciB3aWxsIHJldHVybiB0byBhIHRhcmdldCBsaWtlIGFwcGVhcmFuY2UuIFRoaXMgY3JlYXRlZCBwb2ludCBkYXRhIHJlcHJlc2VudGluZyBTdGFyYnVja3MgYW5kIGlzIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkgdGhlIElEIGFuZCBOYW1lIHZhcmlhYmxlcy4gUmVwZWF0IHRoaXMgcHJvY2VzcyBhbmQgY3JlYXRlIHBvaW50cyBmb3IgYWxsIG9mIHRoZSBvbi1jYW1wdXMgZGluaW5nIGxvY2F0aW9ucyBhbmQgY29udmVuaWVuY2Ugc3RvcmVzICh+MTIpLiBGb3IgdGhlIElEIGZpZWxkIGNvbnRpbnVlIHRvIGluY3JlYXNlIHRoZSBudW1iZXIgYnkgb25lIGVhY2ggdGltZSBhbmQgZm9yIHRoZSBOYW1lIGZpZWxkIHR5cGUgaW4gdGhlIG5hbWUgb2YgdGhlIGxvY2F0aW9uIHlvdSBhcmUgZGVwaWN0aW5nLiBXaGVuIHlvdSBoYXZlIGZpbmlzaGVkIHRoZSBsYXN0IGRhdGEgcG9pbnQsIGNsaWNrIHRoZSBfU2F2ZSBMYXllciBFZGl0c18gYnV0dG9uIDxpbWcgc3JjPSAiSW1hZ2VzL3FnaXMtc2F2ZS1sYXllci1lZGl0cy1idXR0b24uanBnIiBhbHQ9IlNhdmUgTGF5ZXIgRWRpdHMiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCI+IGFuZCB0b2dnbGUgZWRpdGluZyBmb3IgdGhhdCBsYXllciBvZmYgYnkgY2xpY2tpbmcgdGhlIHRvZ2dsZSBidXR0b24gPGltZyBzcmM9ICJJbWFnZXMvcWdpcy10b2dnbGUtZWRpdGluZy1idXR0b24uanBnIiBhbHQ9IlRvZ2dsZSBFZGl0aW5nIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiPi4NCg0KV2l0aCB0aGUgb24tY2FtcHVzIGxvY2F0aW9ucyBjcmVhdGVkIHlvdSBjb3VsZCBhbHNvIHVzZSB0aGUgc2FtZSBzdGVwcyB0byBjcmVhdGUgdGhlIG9mZi1jYW1wdXMgbG9jYXRpb24uIEhvd2V2ZXIsIHNvbWV0aW1lcyB5b3Ugd2lsbCBmaW5kIHRoYXQgY29sbGFib3JhdG9ycyBzZW5kIHlvdSBpbmZvcm1hdGlvbiBpbiB0aGUgZm9ybSBvZiBhIHNwcmVhZHNoZWV0IG9yIHNvbWUgb3RoZXIgZm9ybWF0IHN1Y2ggYXMgKiprZXlob2xlIG1hcmt1cCBsYW5nYXVnZSoqIChLTUwpIGZyb20gR29vZ2xlIEVhcnRoIG9yIGEgS01aIHdoaWNoIGlzIGEgY29tcHJlc3NlZCB2ZXJzaW9uIG9mIGEgS01MLiBJbiBbRXhlcmNpc2UgNSwgU3RlcCAyXShodHRwczovL2NocmlzbWdlbnRyeS5naXRodWIuaW8vR0lTMS1FeGVyY2lzZS01LyMxMl9TdGVwX1R3bzpfVGhlX0FuYWx5c2VzKSB5b3UgbGVhcm5lZCBob3cgdG8gaW1wb3J0IGEgXCouY3N2IGZpbGUgd2l0aG91dCBnZW9tZXRyeSAobWVhbmluZyB0aGVyZSB3ZXJlIG5vIFggYW5kIFkgdmFsdWVzIGZvciBsb2NhdGlvbnMpLiBJZiB0aGUgXCouY3N2IGZpbGUgaGFzIHZhcmlhYmxlcyBmb3IgYSBsb2NhdGlvbiwgc3VjaCBhcyBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIG9yIFVUTSwgeW91IGNhbiBzaW1wbHkgY2hvb3NlICJQb2ludCBDb29yZGluYXRlIiBhbmQgcHJvdmlkZSB0aGUgZmllbGRzIHdoZXJlIHRoZSBYWSBkYXRhIGlzIGxvY2F0ZWQuIEhvd2V2ZXIsIHdpdGggYSB1c2VmdWwgUUdJUyBwbHVnLWluIHlvdSBoYXZlIHRoZSBhYmlsaXR5IHRvIGltcG9ydCBzb21lIGRhdGEgZGlyZWN0bHkgZnJvbSBhIFVSTCBkZXBlbmRpbmcgb24gdGhlIGZvcm1hdC4gU2ltaWxhciB0byBbRXhlcmNpc2UgNSwgU3RlcCA0XShodHRwczovL2NocmlzbWdlbnRyeS5naXRodWIuaW8vR0lTMS1FeGVyY2lzZS01LyMxNF9TdGVwX0ZvdXI6X1RoZV9Db3VudHlfQ29tbWlzc29uX1JlcG9ydCksIGdvIHRvICoqUGx1Z2lucyA+IE1hbmFnZSBhbmQgSW5zdGFsbCBQbHVnaW5zKiogb24gdGhlIG1lbnUgYmFyIGFuZCBzZWFyY2ggZm9yICoqTU1RR0lTKiogYW5kIGluc3RhbGwgdGhlIHBsdWctaW4uDQoNCjxwIGFsaWduPSJjZW50ZXIiPjxpbWcgc3JjPSAiSW1hZ2VzL21tcWdpcy1wbHVnaW4tcGFnZS5wbmciIGFsdD0iTU1RR0lTIiBzdHlsZT0id2lkdGg6ODUlIj48L3A+DQoNCk9uIHRoZSBtZW51IGJhciB5b3Ugd2lsbCBzZWUgYSBuZXcgb3B0aW9uIGZvciBNTVFHSVMgYXZhaWxhYmxlLiBDbGljayBfTU1RR0lTID4gSW1wb3J0L0V4cG9ydCA+IEdlb21ldHJ5IEltcG9ydCBmcm9tIENTViBGaWxlXyBhbmQgaW4gdGhlIHJlc3VsdGluZyB3aW5kb3cgdXNlIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhbmQgY2xpY2sgYXBwbHk6DQoNCi0gSW5wdXQgQ1NWIE5vZGVzIEZpbGUgPSBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vY2hyaXNtZ2VudHJ5L0dJUzEtRXhlcmNpc2UtNi9tYWluL0RhdGEvb2ZmLWNhbXB1cy1kaW5pbmcuY3N2DQotIEdlb21ldHJ5IHR5cGUgPSBQb2ludA0KLSBTaGFwZSBJRCBGaWVsZCA9IG5hbWUNCi0gUGFydCBJRCBGaWVsZCA9ICh0aGlzIHNob3VsZCBiZSBncmF5ZWQgb3V0IGFuZCBub3QgYWNjZXNzaWJsZSkNCi0gTGF0aXR1ZGUgRmllbGQgPSB5DQotIExvbmdpdHVkZSBGaWVsZCA9IHgNCi0gT3V0cHV0IEZpbGUgTmFtZSA9IEluIHRoaXMgZmllbGQgY2xpY2sgb24gdGhlIGJyb3dzZSBidXR0b24gdG8gZ2l2ZSB0aGUgbmV3IGZpbGUgYSBuYW1lIGFuZCBzYXZlIGl0IHRvIHlvdXIgcHJvamVjdCBmb2xkZXINCg0KPHAgYWxpZ249ImNlbnRlciI+PGRpdiBjbGFzcz0iem9vbSI+PGltZyBzcmM9ICJJbWFnZXMvbW1xZ2lzLWltcG9ydC1kaWFsb2cucG5nIiBhbHQ9IkltcG9ydGluZyBDU1YgRmlsZSB3aXRoIE1NUUdJUyIgc3R5bGU9IndpZHRoOjEwMCUiPjwvZGl2PjwvcD4NCg0KVGhlIHJlc3VsdGluZyBpbXBvcnQgc2hvdWxkIGhhdmUgcGxhY2VkIGFub3RoZXIgMjQgZGF0YSBwb2ludHMgb24geW91ciBtYXAuIFlvdSBjYW4gdXNlIHJpZ2h0L0NSVEwgY2xpY2sgYW5kICJab29tIHRvIExheWVyIiBvbiB0aGUgbmV3IGxheWVyIHRvIHNlZSBhbGwgb2YgdGhlIG5ldyBwb2ludHMgKGNvbG9ycyBteSB2YXJ5KS4NCg0KPHAgYWxpZ249ImNlbnRlciI+PGRpdiBjbGFzcz0iem9vbSI+PGltZyBzcmM9ICJJbWFnZXMvcWdpcy1vZmYtY2FtcHVzLWltcG9ydC5wbmciIGFsdD0iSW1wb3J0ZWQgQ1NWIFBvaW50cyIgc3R5bGU9IndpZHRoOjEwMCUiPjwvZGl2PjwvcD4NCg0KPGJpZz48Yj5RdWVzdGlvbiBOby4gMTwvYj48L2JpZz4NCjxibG9ja3F1b3RlPg0KV2hpY2ggb24tY2FtcHVzIGxvY2F0aW9uIGlzIHRoZSBsYXN0IHRvIGNsb3NlIG9uIGEgU2F0dXJkYXkgbmlnaHQ/IFdoYXQgb3RoZXIgdmFyaWFibGVzIHdlcmUgaW5jbHVkZWQgaW4gdGhlIG9mZi1jYW1wdXMgcG9pbnRzIHRoYXQgd2VyZW4ndCBpbmNsdWRlZCBpbiB0aGUgb24tY2FtcHVzIGRhdGEgeW91IGNyZWF0ZWQ/DQo8L2Jsb2NrcXVvdGU+DQoNCjwvZGV0YWlscz4NCjxocj48L2hyPg0KDQo8ZGV0YWlscz48c3VtbWFyeT48YmlnPlZpZXcgZGlyZWN0aW9ucyBpbiA8Yj4gW1Jde3N0eWxlPSJjb2xvcjogIzY0OTVFRCJ9IDwvYj48L3NwYW4+PC9iaWc+PC9zdW1tYXJ5Pg0KQmVmb3JlIHlvdSBiZWdpbiwgeW91IHdpbGwgbmVlZCB0byBvcGVuIHRoZSBbRXgyIENvbGFiIE5vdGVib29rXShodHRwczovL2dpdGh1Yi5jb20vY2hyaXNtZ2VudHJ5L0dJUzEtRXhlcmNpc2UtNi9ibG9iL21haW4vR0lTMV9FWDYuaXB5bmIpIGFuZCBpbnNlcnQgKip0b2NvbGFiKiogYWZ0ZXIgX2dpdGh1Yl8gaW4gdGhlIFVSTCB0byBvcGVuIGluIHRoZSBfQ29sYWIgRW52aXJvbm1lbnRfLiBBcyB5b3UgaGF2ZSBzZWVuIGJlZm9yZSwgUiByZXF1aXJlcyB2YXJpb3VzIHBhY2thZ2VzIHRvIGNvbXBsZXRlIGNlcnRhaW4gYW5hbHlzZXMuIEluIHRoaXMgZXhlcmNpc2UgeW91IHdpbGwgYmUgdXNpbmcgKip0aWR5dmVyc2UsIE9wZW5TdHJlZXRNYXBzLCBnZ2ZvcnRpZnksIG1hcHRvb2xzLCBhbmQgcmdlb3MqKi4gVG8gaW5zdGFsbCBhbmQgbG9hZCB0aGUgcGFja2FnZXMgd2Ugd2lsbCB1c2UgdGhlIGZvbGxvd2luZyBzY3JpcHQ6DQoNCkJsYWguLi5ibGFoLi4uYmxhaC4uLg0KDQo8YmlnPjxiPlF1ZXN0aW9uIE5vLiAxPC9iPjwvYmlnPg0KPGJsb2NrcXVvdGU+DQpfSW5zZXJ0IFRleHQgSGVyZV8NCjwvYmxvY2txdW90ZT4NCg0KPC9kZXRhaWxzPg0KDQojIyBTdGVwIFR3bzogVGhlIEFuYWx5c2VzDQoNCkJsYWguLi5ibGFoLi4uYmxhaC4uLg0KDQo8ZGV0YWlscz4NCjxzdW1tYXJ5PjxiaWc+VmlldyBEaXJlY3Rpb25zIGluIDxiPiBbQXJjR0lTIFByb117c3R5bGU9ImNvbG9yOiNmZjQ1MDAifSA8L2I+PC9iaWc+PC9zdW1tYXJ5Pg0KDQpCbGFoLi4uYmxhaC4uLmJsYWguLi4NCg0KPGJpZz48Yj5RdWVzdGlvbiBOby4gMjwvYj48L2JpZz4NCjxibG9ja3F1b3RlPg0KX0luc2VydCBUZXh0IEhlcmVfDQo8L2Jsb2NrcXVvdGU+DQoNCjwvZGV0YWlscz4NCjxocj48L2hyPg0KDQo8ZGV0YWlscz4NCjxzdW1tYXJ5PjxiaWc+VmlldyBEaXJlY3Rpb25zIGluIDxiPiBbUUdJU117c3R5bGU9ImNvbG9yOiMwMDY0MDAifSA8L2I+PC9iaWc+PC9zdW1tYXJ5Pg0KDQpBRERJTkcgSU5GT1JNQVRJT04gVE8gVEhFIEFUVFJJQlVURSBUQUJMRQ0KDQo8YmlnPjxiPlF1ZXN0aW9uIE5vLiAyPC9iPjwvYmlnPg0KPGJsb2NrcXVvdGU+DQpfSW5zZXJ0IFRleHQgSGVyZV8NCjwvYmxvY2txdW90ZT4NCg0KPC9kZXRhaWxzPg0KPGhyPjwvaHI+DQoNCjxkZXRhaWxzPg0KPHN1bW1hcnk+PGJpZz5WaWV3IERpcmVjdGlvbnMgaW4gPGI+IFtSXXtzdHlsZT0iY29sb3I6IzY0OTVFRCJ9IDwvYj48L2JpZz48L3N1bW1hcnk+DQoNCkJsYWguLi5ibGFoLi4uYmxhaC4uLg0KDQo8YmlnPjxiPlF1ZXN0aW9uIE5vLiAyPC9iPjwvYmlnPg0KPGJsb2NrcXVvdGU+DQpfSW5zZXJ0IFRleHQgSGVyZV8NCjwvYmxvY2txdW90ZT4NCg0KPC9kZXRhaWxzPg0KDQojIyBTdGVwIFRocmVlOiBUaGUgVmlzdWFsaXphdGlvbg0KDQpCbGFoLi4uYmxhaC4uLmJsYWguLi4NCg0KPGRldGFpbHM+PHN1bW1hcnk+PGJpZz5WaWV3IGRpcmVjdGlvbnMgaW4gPGI+IFtBcmNHSVMgUHJvXXtzdHlsZT0iY29sb3I6I2ZmNDUwMCJ9IDwvYj48L3NwYW4+PC9iaWc+PC9zdW1tYXJ5Pg0KDQpCbGFoLi4uYmxhaC4uLmJsYWguLi4NCg0KPGJpZz48Yj5RdWVzdGlvbiBOby4gMzwvYj48L2JpZz4NCjxibG9ja3F1b3RlPg0KX0luc2VydCBUZXh0IEhlcmVfDQo8L2Jsb2NrcXVvdGU+DQoNCjwvZGV0YWlscz4NCjxocj48L2hyPg0KDQo8ZGV0YWlscz48c3VtbWFyeT48YmlnPlZpZXcgZGlyZWN0aW9ucyBpbiA8Yj4gW1FHSVNde3N0eWxlPSJjb2xvcjojMDA2NDAwIn0gPC9iPjwvc3Bhbj48L2JpZz48L3N1bW1hcnk+DQoNCkJsYWguLi5ibGFoLi4uYmxhaC4uLg0KDQo8YmlnPjxiPlF1ZXN0aW9uIE5vLiAzPC9iPjwvYmlnPg0KPGJsb2NrcXVvdGU+DQpfSW5zZXJ0IFRleHQgSGVyZV8NCjwvYmxvY2txdW90ZT4NCg0KPC9kZXRhaWxzPg0KPGhyPjwvaHI+DQoNCjxkZXRhaWxzPjxzdW1tYXJ5PjxiaWc+VmlldyBkaXJlY3Rpb25zIGluIDxiPiBbUl17c3R5bGU9ImNvbG9yOiM2NDk1RUQifSA8L2I+PC9zcGFuPjwvYmlnPjwvc3VtbWFyeT4NCg0KQmxhaC4uLmJsYWguLi5ibGFoLi4uDQoNCjxiaWc+PGI+UXVlc3Rpb24gTm8uIDM8L2I+PC9iaWc+DQo8YmxvY2txdW90ZT4NCl9JbnNlcnQgVGV4dCBIZXJlXw0KPC9ibG9ja3F1b3RlPg0KDQo8L2RldGFpbHM+DQoNCiMjIFN0ZXAgRm91cjogVGhlIFByb3Bvc2FsDQoNCkJsYWguLi5ibGFoLi4uYmxhaC4uLg0KDQo8ZGV0YWlscz48c3VtbWFyeT48YmlnPlZpZXcgZGlyZWN0aW9ucyBpbiA8Yj4gW0FyY0dJUyBQcm9de3N0eWxlPSJjb2xvcjojZmY0NTAwIn0gPC9iPjwvc3Bhbj48L2JpZz48L3N1bW1hcnk+DQoNCkJsYWguLi5ibGFoLi4uYmxhaC4uLg0KDQo8YmlnPjxiPlF1ZXN0aW9uIE5vLiA0PC9iPjwvYmlnPg0KPGJsb2NrcXVvdGU+DQpfSW5zZXJ0IFRleHQgSGVyZV8NCjwvYmxvY2txdW90ZT4NCg0KPC9kZXRhaWxzPg0KPGhyPjwvaHI+DQoNCjxkZXRhaWxzPjxzdW1tYXJ5PjxiaWc+VmlldyBkaXJlY3Rpb25zIGluIDxiPiBbUUdJU117c3R5bGU9ImNvbG9yOiMwMDY0MDAifSA8L2I+PC9zcGFuPjwvYmlnPjwvc3VtbWFyeT4NCg0KQmxhaC4uLmJsYWguLi5ibGFoLi4uDQoNCjxiaWc+PGI+UXVlc3Rpb24gTm8uIDQ8L2I+PC9iaWc+DQo8YmxvY2txdW90ZT4NCl9JbnNlcnQgVGV4dCBIZXJlXw0KPC9ibG9ja3F1b3RlPg0KDQo8L2RldGFpbHM+DQo8aHI+PC9ocj4NCg0KPGRldGFpbHM+PHN1bW1hcnk+PGJpZz5WaWV3IGRpcmVjdGlvbnMgaW4gPGI+IFtSXXtzdHlsZT0iY29sb3I6IzY0OTVFRCJ9IDwvYj48L3NwYW4+PC9iaWc+PC9zdW1tYXJ5Pg0KDQpCbGFoLi4uYmxhaC4uLmJsYWguLi4NCg0KPGJpZz48Yj5RdWVzdGlvbiBOby4gNDwvYj48L2JpZz4NCjxibG9ja3F1b3RlPg0KX0luc2VydCBUZXh0IEhlcmVfDQo8L2Jsb2NrcXVvdGU+DQoNCjwvZGV0YWlscz4NCg0KIyBUaGUgV3JpdGUtVXANCg0KQmxhaC4uLmJsYWguLi5ibGFoLi4uDQoNCldoZW4gY29tcGxldGUsIHNlbmQgYSBsaW5rIHRvIHlvdXIgX0NvbGFiIE5vdGVib29rXyBvciB3b3JkIGRvY3VtZW50IHdpdGggYW5zd2VycyB0byBRdWVzdGlvbnMgMS00IGFuZCB5b3VyIGNvbXBsZXRlZCBtYXAgdmlhIGVtYWlsLg==